/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package empregado;

import empregado.Empregado;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import validators.annotations.Validate;
import exceptions.DadosIncorretosException;
import exceptions.EmpregadoException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import validators.ValidadorCPF;
import validators.ValidadorCampoVazio;
import validators.ValidadorDataAdmissao;
import validators.ValidadorDataDesligamento;
import validators.ValidadorDataNascimento;
import validators.ValidadorNome;
import validators.ValidadorSalario;
import validators.ValidadorSexo;
/**
 *
 * @author thiago
 */
public class Empregado implements Comparable<Empregado> {
    
    @Validate(useValidator=ValidadorCPF.class)
    private String cpf;
    @Validate(useValidator=ValidadorNome.class)
    private String nome;
    @Validate(useValidator=ValidadorSexo.class) 
    private String sexo;
    @Validate(useValidator=ValidadorDataNascimento.class)
    private GregorianCalendar dtnascimento;
    @Validate(useValidator=ValidadorDataAdmissao.class,fieldDependence="dtnascimento")
    private GregorianCalendar dtadmissao;
    @Validate(useValidator=ValidadorDataDesligamento.class,fieldDependence="dtadmissao",nullable=true) 
    private GregorianCalendar dtdesligamento;
    @Validate(useValidator=ValidadorSalario.class)  
    private Double salario;

    public Empregado() {
        //salario=0.0;
    }

    public Empregado(String cpf, String nome, String sexo, GregorianCalendar dtnascimento, GregorianCalendar dtadmissao, Double salario, GregorianCalendar dtdesligamento) {
        this.cpf = cpf;
        this.nome = nome;
        this.sexo = sexo;
        this.dtnascimento = dtnascimento;
        this.dtadmissao = dtadmissao;
        this.salario = salario;
        this.dtdesligamento = dtdesligamento;
    }

    public String getCpf() {
        return cpf;
    }

    public Calendar getDtdesligamento() {
        return dtdesligamento;
    }
    public Calendar getDtadmissao() {
        return dtadmissao;
    }


    public Calendar getDtnascimento() {
        return dtnascimento;
    }

    public String getNome() {
        return nome;
    }

    public Double getSalario() {
        return salario;
    }

    public String getSexo() {
        return sexo;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public void setDtadmissao(GregorianCalendar dtadmissao) {
        this.dtadmissao = dtadmissao;
    }

    public void setDtdesligamento(GregorianCalendar dtdesligamento) {
        this.dtdesligamento = dtdesligamento;
    }

    public void setDtnascimento(GregorianCalendar dtnascimento) {
        this.dtnascimento = dtnascimento;
    }

    public void setNome(String nome){
        this.nome = nome;
    }

    public void setSalario(double salario) {
        this.salario = salario;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }
    
    /**
     * @author thiago
     * Verifica a idade do Empregado segundo a Data de Nascimento informada para ele
     * @param emp   objeto Empregado que deveremos fazer o cálculo.
     * @return  int contendo a idade do usuário considerando a data atual
     */
    public static int getAge(Empregado emp) {        
 
        Calendar idade = Calendar.getInstance();
        idade.add(Calendar.YEAR,-emp.getDtnascimento().get(Calendar.YEAR) );
        idade.add(Calendar.MONTH,-emp.getDtnascimento().get(Calendar.MONTH) );
        idade.add(Calendar.DATE,-emp.getDtnascimento().get(Calendar.DATE) );

        return idade.get(Calendar.YEAR);
    }

    @Override
    public Empregado clone(){
        Empregado newEmpr = new Empregado();
        newEmpr.setCpf(cpf);
        newEmpr.setDtadmissao(dtadmissao);
        newEmpr.setDtdesligamento(dtdesligamento);
        newEmpr.setDtnascimento(dtnascimento);
        newEmpr.setNome(nome);
        newEmpr.setSalario(salario);
        newEmpr.setSexo(sexo);
        return newEmpr;
    }

    @Override
    public int compareTo(Empregado o) {
        return cpf.compareTo(o.getCpf());
    }
    
    
    @Override
    public boolean equals(Object e){
        if(e==null)return false;
        Empregado ee=(Empregado)e;
        return cpf.equals(ee.getCpf());
        //return true;
    }
    
 }